#!/bin/zsh

# 数据库配置信息
DB_HOST="127.0.0.1"
DB_PORT="3306"
DB_NAME="dtd_config"
DB_USER="root"
DB_PASSWORD="root"

# 项目根目录
PROJECT_ROOT="$(cd "$(dirname "$0")" && pwd)"

# SQL文件路径
DB_INIT_SQL="${PROJECT_ROOT}/common/src/main/resources/db_init.sql"

# 检查mysql命令是否存在
check_mysql() {
    if command -v mysql &> /dev/null; then
        echo "MySQL客户端已安装。"
        return 0
    else
        echo "错误: 未找到mysql命令。请确保MySQL客户端已安装并添加到PATH环境变量中。"
        echo "在Mac上，您可以使用Homebrew安装：brew install mysql-client"
        echo "然后将mysql添加到PATH：export PATH="$(brew --prefix mysql-client)/bin:$PATH""
        return 1
    fi
}

# 检查数据库连接
check_db_connection() {
    echo "正在检查数据库连接..."
    if mysql -h${DB_HOST} -P${DB_PORT} -u${DB_USER} -p${DB_PASSWORD} --default-character-set=utf8mb4 -e "SELECT 1" &> /dev/null; then
        echo "数据库连接成功。"
        return 0
    else
        echo "错误: 数据库连接失败！"
        echo "请检查以下信息是否正确："
        echo "- 主机地址: ${DB_HOST}"
        echo "- 端口: ${DB_PORT}"
        echo "- 用户名: ${DB_USER}"
        echo "- 密码: ${DB_PASSWORD}"
        echo "- 确保MySQL服务正在运行"
        return 1
    fi
}

# 初始化数据库表
init_database() {
    echo "正在初始化数据库表..."
    
    # 清空menu表，确保新的菜单数据能够正确插入
    echo "正在清空menu表..."
    mysql -h${DB_HOST} -P${DB_PORT} -u${DB_USER} -p${DB_PASSWORD} --default-character-set=utf8mb4 -e "USE ${DB_NAME}; TRUNCATE TABLE menu;" > /dev/null 2>&1
    echo "menu表已清空。"
    
    # 检查并执行db_init.sql
    if [ -f "${DB_INIT_SQL}" ]; then
        echo "正在执行db_init.sql..."
        mysql -h${DB_HOST} -P${DB_PORT} -u${DB_USER} -p${DB_PASSWORD} --default-character-set=utf8mb4 ${DB_NAME} < "${DB_INIT_SQL}"
        if [ $? -ne 0 ]; then
            echo "警告: 执行db_init.sql时出现错误，但脚本将继续执行。"
        else
            echo "db_init.sql执行成功。"
        fi
    else
        echo "警告: 未找到db_init.sql文件。"
    fi
}

# 验证表是否创建成功
verify_tables() {
    echo "\n正在验证表是否创建成功..."
    
    # 检查service_type表，改进方法避免MySQL警告影响结果
    echo "检查service_type表..."
    # 使用更可靠的方式检查表是否存在并忽略MySQL警告
    TABLE_EXISTS=$(mysql -h${DB_HOST} -P${DB_PORT} -u${DB_USER} -p${DB_PASSWORD} --silent --default-character-set=utf8mb4 -e "SELECT COUNT(*) FROM information_schema.TABLES WHERE TABLE_SCHEMA='${DB_NAME}' AND TABLE_NAME='service_type';")
    
    if [ ${TABLE_EXISTS} -eq 1 ]; then
        echo "✓ service_type表创建成功。"
        # 查看表中的数据
        echo "service_type表中的数据："
        mysql -h${DB_HOST} -P${DB_PORT} -u${DB_USER} -p${DB_PASSWORD} --default-character-set=utf8mb4 -e "USE ${DB_NAME}; SELECT id, type_name FROM service_type LIMIT 5;"
    else
        echo "✗ service_type表创建失败！"
    fi
    
    # 检查server_service表中的数据
    echo "\n检查server_service表中的数据..."
    SERVICE_COUNT=$(mysql -h${DB_HOST} -P${DB_PORT} -u${DB_USER} -p${DB_PASSWORD} --silent --default-character-set=utf8mb4 -e "USE ${DB_NAME}; SELECT COUNT(*) FROM server_service;")
    
    if [ ${SERVICE_COUNT} -gt 0 ]; then
        echo "✓ server_service表中已成功插入${SERVICE_COUNT}条服务数据。"
        mysql -h${DB_HOST} -P${DB_PORT} -u${DB_USER} -p${DB_PASSWORD} --default-character-set=utf8mb4 -e "USE ${DB_NAME}; SELECT id, service_name, status FROM server_service LIMIT 5;"
    else
        echo "✗ server_service表中未插入任何数据！"
    fi
    
    # 检查其他重要表
    echo "\n检查数据库中的所有表..."
    mysql -h${DB_HOST} -P${DB_PORT} -u${DB_USER} -p${DB_PASSWORD} --default-character-set=utf8mb4 -e "USE ${DB_NAME}; SHOW TABLES;"
}

# 主函数
main() {
    echo "===== DST数据同步工具数据库初始化脚本 ======"
    
    # 检查MySQL客户端
    check_mysql || exit 1
    
    # 检查数据库连接
    check_db_connection || exit 1
    
    # 初始化数据库表
    init_database
    
    # 验证表是否创建成功
    verify_tables
    
    echo "\n==================================="
    echo "数据库初始化操作已完成！"
    echo "如果遇到问题，请检查上面的错误信息并进行相应修复。"
}

# 执行主函数
main